import axios from 'axios'
import store from '@/store'
import router from '@/router'
// baseURL 超时时间配置
const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front.itheima.net/',
  timeout: 5000
})

// 全局注入token
instance.interceptors.request.use(config => {
  // 1. 获取token
  const token = store.state.user.token
  // 2. 请求头设置token
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, e => Promise.reject(e))

// 响应拦截器
// token失效 401 跳回登陆页重新获取token
// 自定义错误处理 ，自定义错误抛出
// 处理返回数据 token失效跳回到登录页
instance.interceptors.response.use(
  // 成功（200-300）
  // 失败（状态码不在200-300之间）
  res => res.data, e => {
    if (e.response && e.response.status === 401) {
      // encodeURIComponent方法用来把url编码防止出现特殊意义的符号
      const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
      router.push('/login?redirectUrl=' + redirectUrl)
    }
    return Promise.reject(e)
  })
// 根据用户传过来的请求method 自动适配当前接收我们参数的字段名称
/*
@description:兼容method的方法封装
@param {string} url 接口url
@param {string} method 接口method
@param {Object} reqData 接口传递的参数{}对象的形式
@return {promise}
*/
const request = (url, method, reqData) => {
  // instance对象是pormiss对象
  return instance({
    url,
    method,
    // toLowerCase把字符串转换成小写 key支持三元运算
    [method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
  })
}
export default request
